Amazon SNS で Mac OS X アプリに Push 通知が送信できるようになりました!
OS X アプリに Push 通知を送信できるようになりました
先日6月15日(現地時間)に Amazon SNS のアップデートがあり、Mac OS X アプリと VoIP を利用した iOS アプリに対して Push 通知が送信できるようになりました。
- Send push notifications to Mac OS desktops and VoIP apps on iOS devices with Amazon SNS
- Send a push notification message to a Mac OS X app using Amazon SNS and APNS - Amazon Simple Notification Service
ということで今回は OS X アプリへの Push 通知を試してみました。
必要なこと
- Apple Developer Program アカウント (個人の場合 ¥ 11,800/年)
- AWS アカウント
以前は OS X アプリと iOS アプリの Developer Program はそれぞれ独立していましたが、先日の WWDC 2015 で新しく Apple Developer Program という名前になり一本化されました。Apple Developer Program に加入するだけで、OS X アプリ、iOS アプリ、Safari 拡張機能をすべて App Store で配布できるようになります。
Provisioning Profile を作成する
まずは iOS アプリと同じように Provisioning Profile を作成します。Provisioning Profile を作るには次の作業が必要です。
- Certificate の作成
- App ID の作成
- デバイスの登録
- Provisioning Profile の作成
Certificate の作成
Certificate は iOS アプリ用とは別になるので、新しく作成する必要があります。iOS と同じ作業ですので、以下を参考にしてください。
App ID の作成
次に OS X アプリの App ID を作成します。Push Notification にチェックを入れておきましょう。
App ID 作成後、App ID の詳細を見てみると Push Notification 欄が Configurable になっていると思います(黄色のマークが付いている状態)。Push Notification 用の Certificate も作成する必要があるので、先ほどと同じ手順で作成します。CertificateSigningRequest.certSigningRequest
ファイルは先ほどと同じものでOKなので、キーチェーンアクセスの再操作は不要です。
今回は Development で試すとして、ひとまずこれで OK です。
デバイスの登録
デバイスは今使っている Mac を登録しましょう。Mac の UUID は Xcode の Organizer から見れます。
Provisioning Profile の作成
全ての準備が整ったので、最後に Provisioning Profile を作成します。Type は Mac App Development を選びます。
先ほど作成した App ID を選びます。
先ほど作成した Certificate を選びます。
先ほど作成したデバイスを選びます。
名前を付けます。
これで完了です。ダウンロードします。
ファイルを開くと Provisioning Profile のインストール確認画面が表示されるので、インストールしましょう。
OS X アプリを開発する
次に OS X アプリを開発しましょう。といっても通知を受け取りたいだけなので、デバイストークンを受け取るだけです。
Xcode を開いて「New」から「Project」を選択し、「Cocoa Application」を選択します。
Product Name と Organization Identifier は先ほど作成した App ID に合わせてください。
Xcode プロジェクトが起動したらプロジェクト設定の Signing の Developer ID を選択し、Team を Apple Developer Program の Team に設定します。
また、Build Settings の Provisiong Profile に先ほど作成した Provisioning Profile を設定します。
次に、ちょっとだけコーディングします。AppDelegate
クラスに次のようなコードを実装してください。
#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Remote Notification を登録 NSApplication *application = [aNotification object]; [application registerForRemoteNotificationTypes: NSRemoteNotificationTypeAlert | NSRemoteNotificationTypeBadge | NSRemoteNotificationTypeSound]; } - (void)application:(NSApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // デバイストークンの取得 NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; token = [token stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"token: %@", token); } - (void)application:(NSApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { // エラーの場合 NSLog(@"Error: %@", error); } @end
アプリを実行すると、ログにデバイストークンが出力されると思います。メモしておいてください。
証明書ファイルの書き出し
次に、上記で作成したアプリの Remote Notification の証明書ファイルを書き出します。このファイルは最終的に Amazon SNS に登録することになります。
キーチェーンアクセスを開くと先ほど登録した Remote Notification 用の Certificate があると思うので、右クリックを押して「"Apple Development Mac Push Services: アプリ名"を書き出す」を選びます。
パスワードを付けて P12 ファイルを書き出しましょう。
Platform Application を作成する
次にいよいよ Amazon SNS の登場です。まずはアプリを表現する Platform Application を作成しましょう。まずは「Create Platform Application」をクリックします。
次のような感じで登録します。
項目名 | 設定 |
---|---|
Application Name | 適当な識別しやすいアプリ名 |
Push Notification Platform | Apple Development |
Push Certificate Type | MacOS Push Certificate |
Choose P12 File | 先ほど作成した P12 ファイル (日本語不可!) |
Enter Password | P12 ファイル生成時に設定したパスワード |
ここまでできたら「Load Credential File」をクリックします。すると公開鍵と秘密鍵が表示されるはずです。エラーの場合は P12 ファイルの名前が日本語になっていないかチェックしてください。
作成後、デバイストークンを Platform Endpoint として登録します。作成した Platform Application を選択した状態で「Create Platform Endpoint」をクリックします。
Device Token に先ほどメモしておいたデバイストークンを入力します。User Data は使わないので空欄でOKです。
これで準備ができました!
Push 通知を送信する
では Push 通知を送信してみましょう。Platform Application の詳細画面にアクセスし、作成した Platform Endpoint を選択し「Publish to Endpoint」をクリックします。
適当な文章を。
Publishすると…届いたー!
もちろん、あとから通知センターからも確認できますヽ(`▽´)/
まとめ
手順が少し長くなりましたが、Amazon SNS に直接関係する手順はかなり少ないです。OS X アプリに対する Push 通知のしくみが簡単に構築できますし、何より iOS や Android などといった既にサポートされているプラットフォームも含めて共通の処理にできるので、管理も簡単になります。ぜひ使ってみてはいかがでしょうか。
SNS の送信先が Mac って、いろいろな場面で役立ちそうですね。S3 Event Notification と組み合わせたり、各種エラー通知先としてみたり…使い方は無限大!